# 匿名函数，也叫lambda函数，没有函数名
# 匿名函数结构：lambda 参数1, 参数2, ...: 函数体（表达式），例如lambda a:a**2
# 先有一个列表list1 = [1, 2, 3, 4, 5]
# 想要根据list1得到新的列表new_list，新列表里面的元素是list1中的每一个元素的平方
list1 = [1, 2, 3, 4, 5]
new_list = []
for i in list1:
    new_list.append(i**2)
print(new_list)


# 使用普通的函数，结合map完成
def f(j):
    return j**2
map_list = map(f,list1)
print(map_list)
print(list(map_list))


# 使用lambda表达式结合map完成
map_list = map(lambda x:x**2,list1)
print(map_list)
print(list(map_list))


# 递归函数
# 递归函数，也叫递归算法，是指一个函数调用自身，从而实现某些功能的一种方法。
# 递归函数的优点：代码简洁，逻辑清晰。递归函数的缺点：效率较低，内存占用高。
# 递归函数的实现：
# 递归函数的实现，通常需要定义一个递归函数，以及一个终止条件。
# 递归函数的终止条件，通常为递归函数的输入参数的边界情况。
def factorial(num):
    if num <= 1:  # 终止条件
        return 1
    return num * factorial(num - 1)  # 递归调用自身
print(factorial(5))
"""
5 * factorial(4)
5 * (4 * factorial(3))
5 * (4 * (3 * factorial(2)))
5 * (4 * (3 * (2 * factorial(1))))
5 * (4 * (3 * (2 * 1)))
5 * (4 * (3 * 2))
5 * (4 * 6)
5 * 24
120
结果为：120
"""

